package org.seckill.service;

import java.util.List;

import org.seckill.dto.Exposer;
import org.seckill.dto.SeckillExecution;
import org.seckill.entity.Seckill;
import org.seckill.exception.RepeatKillException;
import org.seckill.exception.SeckillCloseException;
import org.seckill.exception.SeckillException;

/**
 * 站在使用者的角度设计接口
 * 三个方面：方法定义粒度，参数，返回类型（要友好，避免map等类型）
 * @author Linff
 *
 */
public interface SeckillService {

	/**
	 * 获取所有秒杀商品，用于生成列表页，展示所有的秒杀商品
	 */
	public List<Seckill> getSeckillList();

	/**
	 * 获取单个秒杀商品信息
	 * @param seckillId
	 * @return
	 */
	public Seckill getSeckillById(long seckillId);

	/**
	 * 秒杀开启时，输出秒杀接口地址
	 * 否则输出秒杀时间和系统时间
	 * @param seckillId
	 * @return
	 */
	public Exposer exportSeckillUrl(long seckillId);

	/**
	 * 执行秒杀操作
	 * @param seckillId
	 * @param userPhone
	 * @param md5
	 * @return
	 */
	public SeckillExecution executeSeckill(long seckillId, long userPhone,
			String md5) throws SeckillException, RepeatKillException,
			SeckillCloseException;
}
